package cn.xiaolang.function.design_pattern.singleton;

/**
 * 单例模式：枚举
 * <p>
 * 多线程安全： 是
 * Lazy Loading： 否
 * 描述： 这种方式是 Effective Java 作者 Josh Bloch 提倡的方式，
 * 它不仅能避免多线程同步问题，而且还自动支持序列化机制，防止反序列化重新创建新的对象，
 * 绝对防止多次实例化。不过，由于 JDK1.5 之后才加入 enum 特性，
 * 用这种方式写不免让人感觉生疏，在实际工作中，也很少用。
 *
 * @author fuhw/Dean
 * @date 2020-04-29
 */
public class SingleTonByEnum {


    private SingleTonByEnum() {
    }

    public static SingleTonByEnum getInstance() {
        return SingleTon.SINGLE_TON.instance;
    }

    private enum SingleTon {
        SINGLE_TON;

        private SingleTonByEnum instance;

        /**
         * JVM保证这个方法只调用一次
         */
        private SingleTon() {
            instance = new SingleTonByEnum();
        }

    }

    public static void main(String[] args) {
        System.out.println(SingleTonByEnum.getInstance());
        System.out.println(SingleTonByEnum.getInstance());
    }

}
